import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

// 获取当前模块的文件路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 定义一级结构的排序顺序
const CHART_TYPE_ORDER = [
    '柱状图',
    '折线图',
    '饼图',
    '条形图',
    '散点图',
    '雷达图',
    '热力图',
    '漏斗图',
    '盒须图-箱线图',
    '关系图',
    '树图',
    '甘特图',
    '棒棒糖图',
    '其他'
    // 可以继续添加其他图表类型的排序
];

// 读取SVG文件内容
function readSvgFile(svgPath) {
    try {
        return fs.readFileSync(svgPath, 'utf8');
    } catch (e) {
        console.error(`Error reading SVG file ${svgPath}: ${e}`);
        return '';
    }
}

// 转换为从public开始的路径
function toPublicPath(fullPath) {
    const publicIndex = fullPath.indexOf('charts');
    return publicIndex >= 0 ? fullPath.substring(publicIndex) : fullPath;
}

// 处理单个图表项目
function processChartProject(projectDir, projectName) {
    const project = {
        name: projectName.replace(/^\d+\./, '').trim(),
        code: [],
        dataParameters: [],
        Parameters: [],
        mainResults: [],
        pdf: ''
    };

    // 遍历项目子目录
    const items = fs.readdirSync(projectDir, { withFileTypes: true });

    for (const item of items) {
        const itemPath = path.join(projectDir, item.name);
        const publicPath = toPublicPath(itemPath);

        if (item.isDirectory()) {
            // 处理子文件夹
            const subItems = fs.readdirSync(itemPath);

            for (const subItem of subItems) {
                const subItemPath = path.join(itemPath, subItem);
                const subItemPublicPath = toPublicPath(subItemPath);

                if (item.name === '代码展示') {
                    project.code.push(subItemPublicPath);
                } else if (item.name === '数据参数') {
                    project.dataParameters.push(subItemPublicPath);
                } else if (item.name === '主要参数') {
                    project.Parameters.push(subItemPublicPath);
                } else if (item.name === '主要结果') {
                    project.mainResults.push(subItemPublicPath);
                }
            }
        } else if (item.name.endsWith('.pdf')) {
            project.pdf = publicPath;
        }
    }

    return project;
}

// 处理图表类型目录
function processChartType(chartTypeDir, chartTypeName) {
    const children = [];
    const items = fs.readdirSync(chartTypeDir, { withFileTypes: true });

    for (const item of items) {
        if (item.isDirectory()) {
            const projectDir = path.join(chartTypeDir, item.name);
            const project = processChartProject(projectDir, item.name);
            children.push(project);
        }
    }

    // 获取图表类型的SVG图标
    let icon = '';
    const svgFile = path.join(chartTypeDir, `${chartTypeName}.svg`);
    if (fs.existsSync(svgFile)) {
        icon = readSvgFile(svgFile);
    } else {
        // 尝试查找其他SVG文件（如图片中的lineChart.svg）
        const svgFiles = items.filter(i => i.name.endsWith('.svg'));
        if (svgFiles.length > 0) {
            icon = readSvgFile(path.join(chartTypeDir, svgFiles[0].name));
        }
    }

    return {
        name: chartTypeName,
        icon: icon,
        children: children
    };
}

// 主函数
function main() {
    const chartsDir = path.join(__dirname, 'public', 'charts');
    if (!fs.existsSync(chartsDir)) {
        console.error(`Directory not found: ${chartsDir}`);
        return [];
    }

    const result = [];
    const chartTypes = fs.readdirSync(chartsDir, { withFileTypes: true });

    // 按照预定义的顺序处理图表类型
    for (const chartType of CHART_TYPE_ORDER) {
        const chartTypeDir = path.join(chartsDir, chartType);
        if (fs.existsSync(chartTypeDir)) {
            const chartData = processChartType(chartTypeDir, chartType);
            result.push(chartData);
        }
    }

    // 处理未在排序数组中定义的其他图表类型
    for (const item of chartTypes) {
        if (item.isDirectory() && !CHART_TYPE_ORDER.includes(item.name)) {
            const chartTypeDir = path.join(chartsDir, item.name);
            const chartData = processChartType(chartTypeDir, item.name);
            result.push(chartData);
        }
    }

    // 生成JS文件内容
    const jsContent = `// Auto-generated by generateChartsData.js
const chartsData = ${JSON.stringify(result, null, 2)};
export default chartsData;
`;

    // 写入JS文件
    const outputPath = path.join(__dirname, 'src', 'utils', 'chartsData.js');
    fs.mkdirSync(path.dirname(outputPath), { recursive: true });
    fs.writeFileSync(outputPath, jsContent);

    console.log(`Successfully generated ${outputPath}`);
    return result;
}

// 执行主函数
main();